import {takeEvery,call,put} from 'redux-saga/effects'
import $http from '../api/http'
import {shopcartListAction} from './actions/shopcartAction'

function *getShopcartList(){
    console.log('*********saga中获取购物车列表的生成器函数***********');
    //call有两个参数，第一个参数是向网路发送请求的api函数名,不要带括号,第2个参数是本地向后端发送的参数
    //在yild之前的返回值就是网络的响应数据
    const {data:{data}}=yield call($http.shopcart.getShopcartList)
    console.log('data',data);
    //在组件中向仓库发送通知使用disptch,在saga中向仓库发送通知使用put
    //put方法的参数是一个action对象
    yield put(shopcartListAction(data))

}
function *changeNum({_id,n}){
    console.log('*********saga中要改变购物车的商品数量的生成器函数***********');
    //调用后端的api接口来实现数量更改,
    //call方法是向后端发送请求的方法，有两个参数，参数1为后端请求的方法名，参数2为请求的参数
    let arg1=$http.shopcart.changeNum
    let arg2={_id,n}
    const {data:{code}}=yield call(arg1,arg2)
    if(code){
        //在saga文件中发送请求到sage的takeEvery中
        yield put({type:'getShopcartListSaga'})
    }
}

function *checkItem({_id}){
    console.log('*********saga中勾选的方法***********');
    let arg1=$http.shopcart.checkItem
    let arg2=_id
    const {data:{code}}= yield call(arg1,arg2)
    if(code){
        //在saga文件中发送请求到sage的takeEvery中
        yield put({type:'getShopcartListSaga'})
    }
}

function *changeInput({_id,n}){
    console.log('------saga更改数量----------------');
    let arg1=$http.shopcart.changeNumByInput
    let arg2={_id,n}
    const {data:{code}}=yield call(arg1,arg2)
    if(code){
        //在saga文件中发送请求到sage的takeEvery中
        yield put({type:'getShopcartListSaga'})
    }
}
function *mysagas(){
    /*
        takeEvery用来监听组件中发送的通知,有两个参数
        参数1是和组件中发送的action通知对象的type属性值对应
        参数2也是一个生成器函数
    */
    yield takeEvery('getShopcartListSaga',getShopcartList)
    yield takeEvery('changeNumSaga',changeNum)
    yield takeEvery('checkItemSaga',checkItem)
    yield takeEvery('changeInputSaga',changeInput)
}

export default mysagas